package com.kotodama.domain.valueobjects;

import jakarta.persistence.Embeddable;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * 租户名称值对象
 * 封装租户名称的业务规则和验证逻辑
 */
@Embeddable
@NoArgsConstructor
@EqualsAndHashCode
public class TenantName {

    private String value;

    public TenantName(String value) {
        validateTenantName(value);
        this.value = value.trim();
    }
    
    public String getValue() {
        return value;
    }

    /**
     * 验证租户名称
     * @param name 租户名称
     * @throws IllegalArgumentException 如果名称无效
     */
    private void validateTenantName(String name) {
        if (name == null || name.trim().isEmpty()) {
            throw new IllegalArgumentException("租户名称不能为空");
        }
        
        String trimmedName = name.trim();
        
        if (trimmedName.length() < 2) {
            throw new IllegalArgumentException("租户名称长度不能少于2个字符");
        }
        
        if (trimmedName.length() > 50) {
            throw new IllegalArgumentException("租户名称长度不能超过50个字符");
        }
        
        // 检查是否包含特殊字符
        if (!trimmedName.matches("^[a-zA-Z0-9\\u4e00-\\u9fa5_\s]+$")) {
            throw new IllegalArgumentException("租户名称只能包含字母、数字、中文、下划线、连字符和空格");
        }
    }

    @Override
    public String toString() {
        return value;
    }
}